双目立体视觉:四(双目标定matlab,图像校正,图像匹配,计算视差,disparity详解,) |
您所在的位置:网站首页 › 畸变矫正 可以裁剪图像吗 › 双目立体视觉:四(双目标定matlab,图像校正,图像匹配,计算视差,disparity详解,) |
二郎也比较忙,在某大场工作,有时候没有时间回复。 如果希望二郎尽快帮忙,可以将代码,数据和问题发给二郎,谢谢大家理解。 [email protected] 不过还是希望大家自己要好好研究,问二郎太基础性的问题,证明自己没有看过书籍,二郎就有一点点不太想回复了。 首先说明一点,需要用到matlab的stereoCameraCalibrator算法,该算法在2014a版本后添加的,因此之前的版本找不到,所以还是安装一个新版本的吧,我装的2016a。 这里说一下,换2016a可能会遇到打开图片特别慢,这里需要切换一下软件 opengl software(在matlab中执行) 切回硬件 opengl hardware 测试有没有stereo可以输入Enter stereoCameraCalibrator 我们在使用双目相机时,首先需要进行标定(就是相机有误差,我们需要消掉误差,如何消掉?加几个参数调节) 这里还要说明一个问题,有些人询问二郎为啥校正后图像会被截去很多,这里有几个原因: 1)相机畸变较大,两个相机的摆放位置偏差较大,截去较多是正常现象,不影响后期的匹配和距离计算。 2)如果后期出现了问题,则需要考虑是否把高阶畸变参数去掉,k3。 3)相机的摆放位置对其影响较大,应尽可能将两台相机放在同一直线上(光轴平行)。应尽可能避免使用两个性能不同的相机或者参数不一致的相机。 双目标定的流程
stereoParams.TranslationOfCamera2:可以直接使用。 stereoParams.RotationOfCamera2:如需要在其他地方使用该矩阵,需转置以后使用(这里需要注意是用在哪里,转置后只是和我们平常见到的形式保持一致,方便我们分析,如果不导出直接在matlab中应用,多数情况下没有必要转置)。 标定后,图像的校正其实非常简单,只需要代入函数即可 clear all clc I1 = imread('zed_left2.png');%读取左右图片 I2 = imread('zed_right2.png'); figure imshowpair(I1, I2, 'montage'); title('Original Images'); %加载stereoParameters对象。 load('my1stereoParams.mat');%加载你保存的相机标定的mat [J1, J2] = rectifyStereoImages(I1, I2, stereoParams); figure imshowpair(J1, J2, 'montage'); title('Undistorted Images');立体图像校正将图像投影到共同的图像平面上,使得对应的点具有相同的行坐标。 我们完成了校正之后,我们再进行特征点匹配就能将两张图联系到一起,进而求得距离信息。 很多做法中,校正后需要看一下校正的结果,把第一个图像的红通道和第二个图像的蓝通道和绿通道结合构成图像,可以看出浅浅的叠影,红色的就是我们的图1,其他色的就是我们的图2 figure; imshow(cat(3, J1(:,:,1), J2(:,:,2:3)), 'InitialMagnification', 50);%图像显示50%或者也可以用二郎写的一个程序,挺有意思的,让两个物体同时显示,利用到(图像融合,边缘提取) WL1 = abs(imfilter(rgb2gray(J1), fspecial('Laplacian'), 'replicate', 'conv')); WL2 = abs(imfilter(rgb2gray(J2), fspecial('Laplacian'), 'replicate', 'conv')); WL1(WL1(:)>=WL2(:)) = 1;WL1(WL1(:)=WL2(:)) = 0;WL2(WL1(:) |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |